{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pylab as pl\n",
    "from scipy import spatial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib as mpl\n",
    "mpl.rcParams['font.sans-serif'] = ['SimHei']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 空间算法库-spatial"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算最近旁点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5244435681885733 0.4982156075770372\n"
     ]
    }
   ],
   "source": [
    "x = np.sort(np.random.rand(100))\n",
    "idx = np.searchsorted(x, 0.5)\n",
    "print (x[idx], x[idx - 1]) #距离0.5最近的数是这两个数中的一个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "from scipy import spatial\n",
    "np.random.seed(42)\n",
    "N = 100\n",
    "points = np.random.uniform(-1, 1, (N, 2))\n",
    "kd = spatial.cKDTree(points)\n",
    "\n",
    "targets = np.array([(0, 0), (0.5, 0.5), (-0.5, 0.5), (0.5, -0.5), (-0.5, -0.5)])\n",
    "dist, idx = kd.query(targets, 3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([list([48]), list([37, 78]), list([22, 79, 92]), list([6, 35, 58]),\n",
       "       list([7, 42, 55, 83])], dtype=object)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r = 0.2\n",
    "idx2 = kd.query_ball_point(targets, r)\n",
    "idx2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{(1, 46),\n",
       " (3, 21),\n",
       " (3, 82),\n",
       " (3, 95),\n",
       " (5, 16),\n",
       " (9, 30),\n",
       " (10, 87),\n",
       " (11, 42),\n",
       " (11, 97),\n",
       " (18, 41),\n",
       " (29, 74),\n",
       " (32, 51),\n",
       " (37, 78),\n",
       " (39, 61),\n",
       " (41, 61),\n",
       " (50, 84),\n",
       " (55, 83),\n",
       " (73, 81)}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx3 = kd.query_pairs(0.1) - kd.query_pairs(0.08)\n",
    "idx3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10390803b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%figonly=用cKDTree寻找近旁点\n",
    "x, y = points.T\n",
    "colors = \"r\", \"b\", \"g\", \"y\", \"k\"\n",
    "\n",
    "fig, (ax1, ax2, ax3) = pl.subplots(1, 3, figsize=(12, 4))\n",
    "\n",
    "for ax in ax1, ax2, ax3:\n",
    "    ax.set_aspect(\"equal\")\n",
    "    ax.plot(x, y, \"o\", markersize=4)\n",
    "    \n",
    "for ax in ax1, ax2:\n",
    "    for i in range(len(targets)):\n",
    "        c = colors[i]\n",
    "        tx, ty = targets[i]\n",
    "        ax.plot([tx], [ty], \"*\", markersize=10, color=c)\n",
    "\n",
    "for i in range(len(targets)):\n",
    "    nx, ny = points[idx[i]].T\n",
    "    ax1.plot(nx, ny, \"o\", markersize=10, markerfacecolor=\"None\", \n",
    "             markeredgecolor=colors[i], markeredgewidth=1)\n",
    "    \n",
    "    nx, ny = points[idx2[i]].T\n",
    "    ax2.plot(nx, ny, \"o\", markersize=10, markerfacecolor=\"None\", \n",
    "             markeredgecolor=colors[i], markeredgewidth=1)\n",
    "    \n",
    "    ax2.add_artist(pl.Circle(targets[i], r, fill=None, linestyle=\"dashed\"))\n",
    "    \n",
    "for pidx1, pidx2 in idx3:\n",
    "    sx, sy = points[pidx1]\n",
    "    ex, ey = points[pidx2]\n",
    "    ax3.plot([sx, ex], [sy, ey], \"r\", linewidth=2, alpha=0.6)\n",
    "    \n",
    "ax1.set_xlabel(u\"搜索最近的3个近旁点\")\n",
    "ax2.set_xlabel(u\"搜索距离在0.2之内的所有近旁点\")\n",
    "ax3.set_xlabel(u\"搜索所有距离在0.08到0.1之间的点对\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 100)\n",
      "(100, 5)\n"
     ]
    }
   ],
   "source": [
    "from scipy.spatial import distance\n",
    "dist1 = distance.squareform(distance.pdist(points))\n",
    "dist2 = distance.cdist(points, targets)\n",
    "print(dist1.shape)\n",
    "print(dist2.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.15188266 0.09595807 0.05009422 0.11180181 0.19015485]\n",
      "[0.15188266 0.09595807 0.05009422 0.11180181 0.19015485]\n"
     ]
    }
   ],
   "source": [
    "print (dist[:, 0]) # cKDTree.query()返回的与targets最近的距离\n",
    "print (np.min(dist2, axis=0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(22, 92) 0.005346210248158245\n"
     ]
    }
   ],
   "source": [
    "dist1[np.diag_indices(len(points))] = np.inf\n",
    "nearest_pair = np.unravel_index(np.argmin(dist1), dist1.shape)\n",
    "print (nearest_pair, dist1[nearest_pair])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[22 92] 0.005346210248158245\n"
     ]
    }
   ],
   "source": [
    "dist, idx = kd.query(points, 2)\n",
    "print (idx[np.argmin(dist[:, 1])], np.min(dist[:, 1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "N = 1000000\n",
    "start = np.random.uniform(0, 100, N)\n",
    "span = np.random.uniform(0.01, 1, N)\n",
    "span = np.clip(span, 2, 100)\n",
    "end = start + span"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "def naive_count_at(start, end, time):\n",
    "    mask = (start < time) & (end > time)\n",
    "    return np.sum(mask)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x103929e0f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%figonly=使用二维K-d树搜索指定区间的在线用户\n",
    "def _():\n",
    "    N = 100\n",
    "    start = np.random.uniform(0, 100, N)\n",
    "    span = np.random.normal(40, 10, N)\n",
    "    span = np.clip(span, 2, 100)\n",
    "    end = start + span\n",
    "\n",
    "    time = 40\n",
    "    \n",
    "    fig, ax = pl.subplots(figsize=(8, 6))\n",
    "    ax.scatter(start, end)\n",
    "    mask = (start < time) & (end > time)\n",
    "    start2, end2 = start[mask], end[mask]\n",
    "    ax.scatter(start2, end2, marker=\"x\", color=\"red\")\n",
    "    rect = pl.Rectangle((-20, 40), 60, 120, alpha=0.3)\n",
    "    ax.add_patch(rect)\n",
    "    ax.axhline(time, color=\"k\", ls=\"--\")\n",
    "    ax.axvline(time, color=\"k\", ls=\"--\")\n",
    "    ax.set_xlabel(\"Start\")\n",
    "    ax.set_ylabel(\"End\")\n",
    "    ax.set_xlim(-20, 120)\n",
    "    ax.set_ylim(-20, 160)\n",
    "    ax.plot([0, 120], [0, 120])\n",
    "\n",
    "_()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class KdSearch(object):\n",
    "    def __init__(self, start, end, leafsize=10):\n",
    "        self.tree = spatial.cKDTree(np.c_[start, end], leafsize=leafsize)\n",
    "        self.max_time = np.max(end)\n",
    "      \n",
    "    def count_at(self, time):\n",
    "        max_time = self.max_time\n",
    "        to_search = spatial.cKDTree([[time - max_time, time + max_time]])\n",
    "        return self.tree.count_neighbors(to_search, max_time, p=np.inf)\n",
    "    \n",
    "naive_count_at(start, end, 40) == KdSearch(start, end).count_at(40)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> **QUESTION**\n",
    "\n",
    "> 请读者研究点数`N`和`leafsize`参数与创建K-d树和搜索时间之间的关系。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 凸包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[2 5]\n",
      " [2 6]\n",
      " [0 5]\n",
      " [1 6]\n",
      " [1 0]]\n",
      "[5 2 6 1 0]\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "points2d = np.random.rand(10, 2)\n",
    "ch2d = spatial.ConvexHull(points2d)\n",
    "print(ch2d.simplices)\n",
    "print(ch2d.vertices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x103929e0ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=二维平面上的凸包\n",
    "poly = pl.Polygon(points2d[ch2d.vertices], fill=None, lw=2, color=\"r\", alpha=0.5)\n",
    "ax = pl.subplot(aspect=\"equal\")\n",
    "pl.plot(points2d[:, 0], points2d[:, 1], \"go\")\n",
    "for i, pos in enumerate(points2d):\n",
    "    pl.text(pos[0], pos[1], str(i), color=\"blue\")\n",
    "ax.add_artist(poly);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(38, 3)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "points3d = np.random.rand(40, 3)\n",
    "ch3d = spatial.ConvexHull(points3d)\n",
    "ch3d.simplices.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 沃罗诺伊图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "points2d = np.array([[0.2, 0.1], [0.5, 0.5], [0.8, 0.1],\n",
    "                     [0.5, 0.8], [0.3, 0.6], [0.7, 0.6], [0.5, 0.35]])\n",
    "vo = spatial.Voronoi(points2d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.5    0.045 ]\n",
      " [0.245  0.351 ]\n",
      " [0.755  0.351 ]\n",
      " [0.3375 0.425 ]\n",
      " [0.6625 0.425 ]\n",
      " [0.45   0.65  ]\n",
      " [0.55   0.65  ]]\n",
      "[[-1, 0, 1], [-1, 0, 2], [], [6, 4, 3, 5], [5, -1, 1, 3], [4, 2, 0, 1, 3], [6, -1, 2, 4], [6, -1, 5]]\n",
      "[[-1, 0], [0, 1], [-1, 1], [0, 2], [-1, 2], [3, 5], [3, 4], [4, 6], [5, 6], [1, 3], [-1, 5], [2, 4], [-1, 6]]\n"
     ]
    }
   ],
   "source": [
    "print(vo.vertices); print(vo.regions); print(vo.ridge_vertices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [],
   "source": [
    "bound = np.array([[-100, -100], [-100,  100], \n",
    "                  [ 100,  100], [ 100, -100]])\n",
    "vo2 = spatial.Voronoi(np.vstack((points2d, bound)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\spatial\\_plotutils.py:20: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.\n",
      "  was_held = ax.ishold()\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1039421e588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%figonly=沃罗诺伊图将空间分割为多个区域\n",
    "fig, (ax1, ax2) = pl.subplots(1, 2, figsize=(9, 4.5))\n",
    "ax1.set_aspect(\"equal\")\n",
    "ax2.set_aspect(\"equal\")\n",
    "spatial.voronoi_plot_2d(vo, ax=ax1)\n",
    "for i, v in enumerate(vo.vertices):\n",
    "    ax1.text(v[0], v[1], str(i), color=\"red\")\n",
    "    \n",
    "for i, p in enumerate(points2d):\n",
    "    ax1.text(p[0], p[1], str(i), color=\"blue\")\n",
    "\n",
    "n = len(points2d)\n",
    "color = pl.cm.rainbow(np.linspace(0, 1, n))\n",
    "for i in range(n):\n",
    "    idx = vo2.point_region[i]\n",
    "    region = vo2.regions[idx]\n",
    "    poly = pl.Polygon(vo2.vertices[region], facecolor=color[i], alpha=0.5, zorder=0)\n",
    "    ax2.add_artist(poly)\n",
    "ax2.scatter(points2d[:, 0], points2d[:, 1], s=40, c=color, linewidths=2, edgecolors=\"k\")\n",
    "ax2.plot(vo2.vertices[:, 0], vo2.vertices[:, 1], \"ro\", ms=6)\n",
    "\n",
    "for ax in ax1, ax2:\n",
    "    ax.set_xlim(0, 1)\n",
    "    ax.set_ylim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 3 1 7 4 6 5]\n",
      "[6, -1, 2, 4]\n"
     ]
    }
   ],
   "source": [
    "print (vo.point_region)\n",
    "print (vo.regions[6])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 德劳内三角化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[8 5 7]\n",
      " [1 5 3]\n",
      " [5 6 7]\n",
      " [6 0 7]\n",
      " [0 6 2]\n",
      " [6 1 2]\n",
      " [1 6 5]\n",
      " [9 5 8]\n",
      " [4 9 8]\n",
      " [5 9 3]\n",
      " [9 4 3]]\n",
      "[[104.58977484 127.03566055]\n",
      " [235.1285     198.68143374]\n",
      " [107.83960707 155.53682482]\n",
      " [ 71.22104881 228.39479887]\n",
      " [110.3105     291.17642838]\n",
      " [201.40695449 227.68436282]\n",
      " [201.61895891 226.21958623]\n",
      " [152.96231864  93.25060083]\n",
      " [205.40381294 -90.5480267 ]\n",
      " [235.1285     127.45701644]\n",
      " [267.91709907 107.6135    ]]\n"
     ]
    }
   ],
   "source": [
    "x = np.array([46.445, 263.251, 174.176, 280.899, 280.899, \n",
    "              189.358, 135.521, 29.638, 101.907, 226.665])\n",
    "y = np.array([287.865, 250.891, 287.865, 160.975, 54.252,\n",
    "              160.975, 232.404, 179.187, 35.765, 71.361])\n",
    "points2d = np.c_[x, y]\n",
    "dy = spatial.Delaunay(points2d)\n",
    "vo = spatial.Voronoi(points2d) \n",
    "print(dy.simplices)\n",
    "print(vo.vertices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "group_control": {
     "group": 0
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\spatial\\_plotutils.py:20: MatplotlibDeprecationWarning: The ishold function was deprecated in version 2.0.\n",
      "  was_held = ax.ishold()\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1039296a630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#%fig=德劳内三角形的外接圆与圆心\n",
    "cx, cy = vo.vertices.T\n",
    "\n",
    "ax = pl.subplot(aspect=\"equal\")\n",
    "spatial.delaunay_plot_2d(dy, ax=ax)\n",
    "ax.plot(cx, cy, \"r.\")\n",
    "for i, (cx, cy) in enumerate(vo.vertices):\n",
    "    px, py = points2d[dy.simplices[i, 0]]\n",
    "    radius = np.hypot(cx - px, cy - py)\n",
    "    circle = pl.Circle((cx, cy), radius, fill=False, ls=\"dotted\")\n",
    "    ax.add_artist(circle)\n",
    "ax.set_xlim(0, 300)\n",
    "ax.set_ylim(0, 300);"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
